<?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

/*
|--------------------------------------------------------------------------
| 环境变量设置方式
|--------------------------------------------------------------------------
|
| 现在是根据运维php.ini设置的环境加载.env文件内的环境变量
| 如果之后采用Docker部署可以指定--env-file=.env文件来设置容器的环境变量
| 程序不需要改动，如果两处定义相同的名字，会优先获取操作系统的环境变量
| 使用Docker后，下面的copy文件操作就可以删除
*/
$runtime = get_cfg_var('runtime.environment');
if (empty($runtime)) {
    $runtime = 'dev';
}
$envFile = '.env.'.$runtime;
try {
    (new Dotenv\Dotenv(__DIR__.'/../env', $envFile))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/

return $app;
